﻿using System;
using System.Collections.Generic;

namespace GeoAPI.Geometries
{
	public interface IGeometryFactory
	{
		ICoordinateSequenceFactory CoordinateSequenceFactory { get; }

		int SRID { get; }

		IPrecisionModel PrecisionModel { get; }

		IGeometry BuildGeometry(ICollection<IGeometry> geomList);

		IGeometry CreateGeometry(IGeometry g);

		IPoint CreatePoint(Coordinate coordinate);

		IPoint CreatePoint(ICoordinateSequence coordinates);

		ILineString CreateLineString(Coordinate[] coordinates);

		ILineString CreateLineString(ICoordinateSequence coordinates);

		ILinearRing CreateLinearRing(Coordinate[] coordinates);

		ILinearRing CreateLinearRing(ICoordinateSequence coordinates);

		IPolygon CreatePolygon(ILinearRing shell, ILinearRing[] holes);

		IPolygon CreatePolygon(ICoordinateSequence coordinates);

		IPolygon CreatePolygon(Coordinate[] coordinates);

		IPolygon CreatePolygon(ILinearRing shell);

		IMultiPoint CreateMultiPoint(Coordinate[] coordinates);

		IMultiPoint CreateMultiPoint(IPoint[] point);

		IMultiPoint CreateMultiPoint(ICoordinateSequence coordinates);

		IMultiLineString CreateMultiLineString(ILineString[] lineStrings);

		IMultiPolygon CreateMultiPolygon(IPolygon[] polygons);

		IGeometryCollection CreateGeometryCollection(IGeometry[] geometries);

		IGeometry ToGeometry(Envelope envelopeInternal);
	}
}
